gusucode.com > VC++ 可隐藏某列数据的List操作类-源码程序 > VC++ 可隐藏某列数据的List操作类-源码程序/code/HHideListCtrl.cpp
// HHideListCtrl.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "HHideListCtrl.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // HHideListCtrl HHideListCtrl::HHideListCtrl() { } HHideListCtrl::~HHideListCtrl() { } BEGIN_MESSAGE_MAP(HHideListCtrl, CListCtrl) //{{AFX_MSG_MAP(HHideListCtrl) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // HHideListCtrl message handlers void HHideListCtrl::PreSubclassWindow() { ASSERT( GetStyle() & LVS_REPORT ); CListCtrl::PreSubclassWindow(); VERIFY( m_ctlHeader.SubclassWindow( GetHeaderCtrl()->GetSafeHwnd() ) ); } int HHideListCtrl::InsertColumn(int nCol, const LVCOLUMN *pColumn) { return InsertColumn(nCol, pColumn, FALSE); } int HHideListCtrl::InsertColumn(int nCol, const LVCOLUMN *pColumn, BOOL bHide) { int nReturn = CListCtrl::InsertColumn(nCol, pColumn); if(nReturn>=0){ SColumn sColumn; sColumn.bHide = bHide; sColumn.nItemWidth = pColumn->cx; m_ctlHeader.m_aColum.Add(sColumn); } return nReturn; } int HHideListCtrl::InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat, int nWidth, int nSubItem) { return InsertColumn(nCol,lpszColumnHeading, FALSE, nFormat, nWidth, nSubItem); } int HHideListCtrl::InsertColumn(int nCol, LPCTSTR lpszColumnHeading, BOOL bHide, int nFormat, int nWidth, int nSubItem) { int nReturn = CListCtrl::InsertColumn(nCol, lpszColumnHeading, nFormat, nWidth, nSubItem); if(nReturn>=0){ SColumn sColumn; //sColumn.bHide = bHide; sColumn.nItemWidth = nWidth; m_ctlHeader.m_aColum.Add(sColumn); if(bHide){ //将该列宽度设置为 0 SetColumnHide(nCol, TRUE); } m_ctlHeader.m_aColum[nCol].bHide = bHide; } return nReturn; } BOOL HHideListCtrl::DeleteColumn(int nCol) { BOOL bReturn = CListCtrl::DeleteColumn(nCol); if(bReturn){ m_ctlHeader.m_aColum.RemoveAt(nCol, 1); } return bReturn; } //设置某列是否隐藏。如果设置成功,返回>=0。==0:原来是隐藏的, ==1:原来是显示的 int HHideListCtrl::SetColumnHide(int nCol, BOOL bHide) { int nColumnCount = m_ctlHeader.GetItemCount(); if(nCol<0 || nCol>=nColumnCount) return -1; int nHideReturn = m_ctlHeader.m_aColum[nCol].bHide; m_ctlHeader.m_aColum[nCol].bHide = bHide; if(bHide){ //是隐藏 //if(m_ctlHeader.m_aColum[nCol].bHide) return nHideReturn; m_ctlHeader.m_aColum[nCol].nItemWidth = GetColumnWidth(nCol); SetColumnWidth(nCol, 0); } else { //是显示 SetColumnWidth(nCol, m_ctlHeader.m_aColum[nCol].nItemWidth); } return nHideReturn; }